home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / AmigaE / Src / Class / BinTree / bintree.e < prev   
Text File  |  1992-09-02  |  2KB  |  61 lines

  1. -> binary tree implementation in E
  2.  
  3. OBJECT bintree PRIVATE
  4.   left:PTR TO bintree
  5.   right:PTR TO bintree
  6. ENDOBJECT            -> subclasses can add data here
  7.  
  8. PROC is_bigger(other:PTR TO bintree) OF bintree IS EMPTY
  9. PROC is_equal(other:PTR TO bintree) OF bintree IS EMPTY
  10.  
  11. PROC bintree(l,r) OF bintree
  12.   self.left:=l
  13.   self.right:=r
  14. ENDPROC
  15.  
  16. -> folds value v with proc through the tree.
  17.  
  18. PROC traverse(proc,v) OF bintree
  19.   v:=proc(self,v)
  20.   IF self.left THEN v:=self.left.traverse(proc,v)
  21.   IF self.right THEN v:=self.right.traverse(proc,v)
  22. ENDPROC v
  23.  
  24. /*-------------------------------------------------------*/
  25.  
  26. -> integer tree
  27.  
  28. OBJECT intbintree OF bintree
  29.   i:LONG
  30. ENDOBJECT
  31.  
  32. PROC intbintree(l,r,i) OF intbintree
  33.   self.bintree(l,r)            -> call super constructor
  34.   self.i:=i
  35. ENDPROC
  36.  
  37. PROC is_bigger(other:PTR TO intbintree) OF intbintree IS self.i>other.i
  38. PROC is_equal(other:PTR TO intbintree) OF intbintree IS self.i=other.i
  39.  
  40. PROC total() OF intbintree IS self.traverse({sum},0)
  41. PROC sum(t:PTR TO intbintree,v) IS t.i+v
  42.  
  43. /*-------------------------------------------------------*/
  44.  
  45. -> string tree
  46.  
  47. OBJECT strbintree OF bintree
  48.   s:PTR TO CHAR
  49. ENDOBJECT
  50.  
  51. PROC is_bigger(other:PTR TO strbintree) OF strbintree IS EMPTY  ->???
  52. PROC is_equal(other:PTR TO strbintree) OF strbintree IS StrCmp(self.s,other.s)
  53.  
  54. /*-------------------------------------------------------*/
  55.  
  56. PROC main()
  57.   DEF p:PTR TO intbintree,p1:PTR TO intbintree,p2:PTR TO intbintree
  58.   NEW p.intbintree(NEW p1.intbintree(NIL,NIL,2),NEW p2.intbintree(NIL,NIL,3),40)
  59.   WriteF('total=\d\n',p.total())
  60. ENDPROC
  61.